package com.tron.dobest.dynamicdatasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 描述：线程局部变量
 *
 * @author TRON
 * @since 2020-04-20
 */
public class DynamicDataSourceContextHolder {
    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
    /**
     * ThreadLocal 用于提供线程局部变量，在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。
     * 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】，相当于线程的 private static 类型变量。
     */
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();

    //在当前线程中设置一个局部变量
    public static void setDataSource(String dataSource) {
        log.info("======切换到{}数据源======", dataSource);
        CONTEXT_HOLDER.set(dataSource);
    }

    //获取当前线程中的局部变量
    public static String getDataSource() {
        return CONTEXT_HOLDER.get();
    }

    //清空当前线程中的局部变量
    public static void clearDataSource() {
        CONTEXT_HOLDER.remove();
    }
}
